Go语言RPC(模拟远程过程调用) |
您所在的位置:网站首页 › go rpc调用 › Go语言RPC(模拟远程过程调用) |
引入 服务器开发中会使用RPC(Remote Procedure Call,远程过程调用)简化进程间通信的过程。RPC能有效地封装通信过程。RPC能有效地封装通信过程,让远程的数据收发通信过程看起来就像本地的函数调用一样。 本例中,使用通道代理Socket 实现RPC的过程。客户端与服务器运行在同一个进程,服务器和客服端在两个goroutine中运行。先给出完整代码,然后在详细分析每一个部分。 package main import ( "errors" "fmt" "time" ) //模拟RPC客户端的请求和接收消息封装 func RPCClient(ch chan string, req string) (string, error) { //向服务器发送请求 ch for { //接收客户端请求 data := //发生错误打印 fmt.Println(err) } else { //正常接收到数据 fmt.Println("Client received", recv) } } 运行输出: server received: hi Client received roger 客户端请求和接收数据封装 下面的代码封装了向服务器请求数据,等待服务器返回数据,如果请求方超时,该函数还会处理超时逻辑。 //模拟RPC客户端的请求和接收消息封装 func RPCClient(ch chan string, req string) (string, error) { //向服务器发送请求 ch for { //接收客户端请求 data := for { //接收客户端请求 data := //创建一个无缓冲串通道 ch := make(chan string) //并发执行服务器逻辑 go RPCServer(ch) recv, err := RPCClient(ch, "hi") if err != nil { //发生错误打印 fmt.Println(err) } else { //正常接收到数据 fmt.Println("Client received", recv) } } 代码说明如下: 第 4 行,创建无缓冲的字符串通道,这个通道用于模拟网络和 socke t概念,既可以从通道接收数据,也可以发送。 第 7 行,并发执行服务器逻辑。服务器一般都是独立进程的,这里使用并发将服务器和客户端逻辑同时在一个进程内运行。 第 10 行,使用 RPCClient() 函数,发送“hi”给服务器,同步等待服务器返回。 第 13 行,如果通信过程发生错误,打印错误。 第 16 行,正常接收时,打印收到的数据。
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |